BR

[Resolvido] [PEDIDO] Premium account e itens para iniciantes por comando

Por brunonyyu, 09 de ago. de 2019 em Resolvidos

33
10.1k
brunonyyuB
09 de agosto de 2019 às 22:46

Ola, 

Gostaria de estar adicionado um comando na qual quando o Player digitar !starterkit ele ganhasse premium account (sistema que uso é P.A) por 7 dias e 3 itens de minha escolha (pode deixar os 3 itens com o mesmo id que eu vou alterar depois), porem tem os seguintes detalhes:

 

O player tem que ser lvl 20 menos para poder ativar o comando.

so poderar ser ativado 1 vez por conta.

 

Agradeço desde ja.

OBS: nao achei nada no forum para eu poder editar.

Yan LiimaY
10 de agosto de 2019 às 12:04

Ando meio carregado aqui, mas assim que der e se ninguém resolver para você, irei fazer e te mando aqui.

brunonyyuB
11 de agosto de 2019 às 15:53
Em 10/08/2019 em 12:04, Yan Liima disse:

Ando meio carregado aqui, mas assim que der e se ninguém resolver para você, irei fazer e te mando aqui.

Obrigado @Yan Liima eu tentei editar a propria premium account para adequar ao que eu queria mas como n sei mto o que posso ou n usar acabou n dando certo

Yan LiimaY
12 de agosto de 2019 às 03:12
Melhor resposta

@brunonyyu tenta ai, em talkactions.xml:

<talkaction words="!starterkit" event="script" value="starterkit.lua"/>

LUA:

local config = {
level = 20, -- Apartir de que level não irá receber
days = 7, -- Dias de Premium Account(VIP) que irá receber
items = {{2160,100}, {2161,1}, {2162,1}}, -- ID do item,QUANTIDADE
storage = 233486 -- str, não mexa
}

function onSay(cid, words, param)
if getPlayerLevel(cid) > config.level then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você precisa ter no maximo level "..config.level.." para receber o kit inicial.")
elseif getPlayerStorageValue(cid, config.storage) < 0 then
for _,ab in pairs(config.items) do
doPlayerAddItem(cid, ab[1], ab[2])
end
doPlayerAddPremiumDays(cid, config.days)   
setPlayerStorageValue(cid, config.storage, 1)
doPlayerSendTextMessage(cid, 25, "Você acabou de ganhar o kit inicial!")
else
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já pegou seu kit inicial.")
end
return true
end

 

brunonyyuB
12 de agosto de 2019 às 09:01
5 horas atrás, Yan Liima disse:

@brunonyyu tenta ai, em talkactions.xml:

<talkaction words="!starterkit" event="script" value="starterkit.lua"/>

LUA:

local config = {
level = 20, -- Apartir de que level não irá receber
days = 7, -- Dias de Premium Account(VIP) que irá receber
items = {{2160,100}, {2161,1}, {2162,1}}, -- ID do item,QUANTIDADE
storage = 233486 -- str, não mexa
}

function onSay(cid, words, param)
if getPlayerLevel(cid) > config.level then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você precisa ter no maximo level "..config.level.." para receber o kit inicial.")
elseif getPlayerStorageValue(cid, config.storage) < 0 then
for _,ab in pairs(config.items) do
doPlayerAddItem(cid, ab[1], ab[2])
end
doPlayerAddPremiumDays(cid, config.days)   
setPlayerStorageValue(cid, config.storage, 1)
doPlayerSendTextMessage(cid, 25, "Você acabou de ganhar o kit inicial!")
else
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já pegou seu kit inicial.")
end
return true
end

 

Bom Dia @Yan Liima, cara muito obrigado, deu certo, somente um ponto na qual se o cara criar outro char ele consegue ativar novamente o código, eu gostaria que fosse ativado uma vez por conta, mas estou satisfeito assim, gostaria de aprender um pouco mais de LUA, caso tenha um caminho para me mostrar e eu correr atrás agradeço também, vi que vc tb é mapper estou com um probleminha caso puder novamente me ajudar eu agradeço.

 

Yan LiimaY
12 de agosto de 2019 às 14:41
Em 12/08/2019 em 09:01, brunonyyu disse:

Bom Dia @Yan Liima, cara muito obrigado, deu certo, somente um ponto na qual se o cara criar outro char ele consegue ativar novamente o código, eu gostaria que fosse ativado uma vez por conta, mas estou satisfeito assim, gostaria de aprender um pouco mais de LUA, caso tenha um caminho para me mostrar e eu correr atrás agradeço também, vi que vc tb é mapper estou com um probleminha caso puder novamente me ajudar eu agradeço.

 

É possivel sim, porém você teria que verificar se há a função na sua LIB. Bom vou te ensinar como ajeitar isso. Primeiramente, vá até o script no qual você copiou e troque tudo por:

Spoiler
local config = {
level = 20, -- Apartir de que level não irá receber
days = 7, -- Dias de Premium Account(VIP) que irá receber
items = {{2160,100}, {2161,1}, {2162,1}}, -- ID do item,QUANTIDADE
storage = 233486 -- str, não mexa
}

function onSay(cid, words, param)
if getPlayerLevel(cid) > config.level then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você precisa ter no maximo level "..config.level.." para receber o kit inicial.")
elseif getAccountStorageValue(getPlayerAccountId(cid), config.storage) < 0 then
for _,ab in pairs(config.items) do
doPlayerAddItem(cid, ab[1], ab[2])
end
doPlayerAddPremiumDays(cid, config.days)   
setAccountStorageValue(getPlayerAccountId(cid), config.storage, 1)
doPlayerSendTextMessage(cid, 25, "Você acabou de ganhar o kit inicial!")
else
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já pegou seu kit inicial.")
end
return true
end

 

 

No seu data/lib no arquivo 050-function.lua verifique se já existe essa função, se não tiver, é só adicionar:

Spoiler
function getAccountStorageValue(accid, key)
local value = db.getResult("SELECT `value` FROM `account_storage` WHERE `account_id` = " .. accid .. " and `key` = " .. key .. " LIMIT 1;")
if(value:getID() ~= -1) then
return value:getDataInt("value")
else
return -1
end
value:free()
end

function setAccountStorageValue(accid, key, value)
local getvalue = db.getResult("SELECT `value` FROM `account_storage` WHERE `account_id` = " .. accid .. " and `key` = " .. key .. " LIMIT 1;")
if(getvalue:getID() ~= -1) then
db.executeQuery("UPDATE `account_storage` SET `value` = " .. accid .. " WHERE `key`=" .. key .. " LIMIT 1');")
getvalue:free()
return 1
else
db.executeQuery("INSERT INTO `account_storage` (`account_id`, `key`, `value`) VALUES (" .. accid .. ", " .. key .. ", '"..value.."');")
return 1
end
end

 

 

Depois é só ir no seu banco de dados e executar essa Query: 

CREATE TABLE `account_storage` (
`account_id` int(11) NOT NULL default '0',
`key` int(10) unsigned NOT NULL default '0',
`value` varchar(255) NOT NULL default '0',
UNIQUE KEY `account_id_2` (`account_id`,`key`),
KEY `account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Prontinho xD. Se tem interesse em aprender LUA, entre no nosso grupo do discord: https://discord.gg/PyUvYf

Editado Agosto 14 por nedroesdoksdja

brunonyyuB
12 de agosto de 2019 às 15:13
1 hora atrás, Yan Liima disse:

É possivel sim, porém você teria que verificar se há a função na sua LIB. Bom vou te ensinar como ajeitar isso. Primeiramente, vá até o script no qual você copiou e troque tudo por:

  Ocultar conteúdo

local config = {
level = 20, -- Apartir de que level não irá receber
days = 7, -- Dias de Premium Account(VIP) que irá receber
items = {{2160,100}, {2161,1}, {2162,1}}, -- ID do item,QUANTIDADE
storage = 233486 -- str, não mexa
}

function onSay(cid, words, param)
if getPlayerLevel(cid) > config.level then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você precisa ter no maximo level "..config.level.." para receber o kit inicial.")
elseif setAccountStorageValue(getPlayerAccountId(cid), config.storage) < 0 then
for _,ab in pairs(config.items) do
doPlayerAddItem(cid, ab[1], ab[2])
end
doPlayerAddPremiumDays(cid, config.days)   
setAccountStorageValue(getPlayerAccountId(cid), config.storage, 1)
doPlayerSendTextMessage(cid, 25, "Você acabou de ganhar o kit inicial!")
else
doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você já pegou seu kit inicial.")
end
return true
end

 

 

No seu data/lib no arquivo 050-function.lua verifique se já existe essa função, se não tiver, é só adicionar:

  Ocultar conteúdo

function getAccountStorageValue(accid, key)
local value = db.getResult("SELECT `value` FROM `account_storage` WHERE `account_id` = " .. accid .. " and `key` = " .. key .. " LIMIT 1;")
if(value:getID() ~= -1) then
return value:getDataInt("value")
else
return -1
end
value:free()
end

function setAccountStorageValue(accid, key, value)
local getvalue = db.getResult("SELECT `value` FROM `account_storage` WHERE `account_id` = " .. accid .. " and `key` = " .. key .. " LIMIT 1;")
if(getvalue:getID() ~= -1) then
db.executeQuery("UPDATE `account_storage` SET `value` = " .. accid .. " WHERE `key`=" .. key .. " LIMIT 1');")
getvalue:free()
return 1
else
db.executeQuery("INSERT INTO `account_storage` (`account_id`, `key`, `value`) VALUES (" .. accid .. ", " .. key .. ", '"..value.."');")
return 1
end
end

 

 

Depois é só ir no seu banco de dados e executar essa Query: 

CREATE TABLE `account_storage` (
`account_id` int(11) NOT NULL default '0',
`key` int(10) unsigned NOT NULL default '0',
`value` varchar(255) NOT NULL default '0',
UNIQUE KEY `account_id_2` (`account_id`,`key`),
KEY `account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Prontinho xD. Se tem interesse em aprender LUA, entre no nosso grupo do discord: https://discord.gg/PyUvYf

50-function, ja existe em meu OT, tentei adicionar dentro, mas veio mto erro no distro.

somente confirmand, para executar no SQL, seria isso certo?

Sem título.png

 

 

 

(EDITADO 1 - conseguir tirar os erros do 50- function, restou somente um erro no talkaction novo, de caracterer, simbolo inesperado, vou tentar resolver aqui.)

(EDITADO 2 - consegui tirar erro do talkaction, porem n testei, quando abro server aparece erro no sql, que deve ser por causa do que eu add la. vou tentar algo por aqui. caso esteja errado so falar kk.)

Editado Agosto 12 por brunonyyu

Yan LiimaY
13 de agosto de 2019 às 13:23
22 horas atrás, brunonyyu disse:

(EDITADO 1 - conseguir tirar os erros do 50- function, restou somente um erro no talkaction novo, de caracterer, simbolo inesperado, vou tentar resolver aqui.)

(EDITADO 2 - consegui tirar erro do talkaction, porem n testei, quando abro server aparece erro no sql, que deve ser por causa do que eu add la. vou tentar algo por aqui. caso esteja errado so falar kk.)

Por ser sqlite complica um pouco kkk a Query que passei é de mysql. Eu só estudei mysql, não sei direito como o sqlite funciona. Mas pelo visto, no final das tabela tem um END, igual os demais ai no print.

brunonyyuB
13 de agosto de 2019 às 13:26
2 minutos atrás, Yan Liima disse:

Por ser sqlite complica um pouco kkk a Query que passei é de mysql. Eu só estudei mysql, não sei direito como o sqlite funciona. Mas pelo visto, no final das tabela tem um END, igual os demais ai no print.

eu coloquei, mas nao rolou da mesma forma da erro no sql3, mas é necessario para funcionar o resto?

Yan LiimaY
13 de agosto de 2019 às 13:28
Agora, brunonyyu disse:

eu coloquei, mas nao rolou da mesma forma da erro no sql3, mas é necessario para funcionar o resto?

Sim, seria necessario para funcionar o Storage Account. Assim só daria para pegar o item inicial uma vez por conta, não por personagem. Mas se peferir, você pode utilizar o primeiro que te enviei mesmo kk

brunonyyuB
13 de agosto de 2019 às 13:35
1 minuto atrás, Yan Liima disse:

Sim, seria necessario para funcionar o Storage Account. Assim só daria para pegar o item inicial uma vez por conta, não por personagem. Mas se peferir, você pode utilizar o primeiro que te enviei mesmo kk

entendi, vou tentar mais um tempo aqui vamos ver, eu tentei abrir o sql com o slq server do windows, quando executei ele apresentou erro em outras linhas fora as que adicionei, vou tentar algumas coisas e passo aqui qualquer coisa, so nao queria que o cara pudesse adicionar Premium account a cada char criado, ja que nao penso em usar Vip, e como estou pensando em usar rookgaard, queria poder dar a opção do player ir na area premium.

30 minutos atrás, brunonyyu disse:

entendi, vou tentar mais um tempo aqui vamos ver, eu tentei abrir o sql com o slq server do windows, quando executei ele apresentou erro em outras linhas fora as que adicionei, vou tentar algumas coisas e passo aqui qualquer coisa, so nao queria que o cara pudesse adicionar Premium account a cada char criado, ja que nao penso em usar Vip, e como estou pensando em usar rookgaard, queria poder dar a opção do player ir na area premium.

@Yan Liima pode ser tambem que eu esteja executando no lugar errado, em qual destes arquivos eu devo executar o query?

teste.jpg

Yan LiimaY
13 de agosto de 2019 às 14:18

@brunonyyu Ela é executada no banco de dados no qual você utiliza. Sqlitestudio ou esse realserver. Se preferir, você pode pegar o proprio .sql, abrir ele em algum editor de texto, adicionar as linhas lá corretamente e importar no teu servidor... O mysql tem mais facilidade para essas coisas.

brunonyyuB
13 de agosto de 2019 às 14:20
1 hora atrás, Yan Liima disse:

@brunonyyu Ela é executada no banco de dados no qual você utiliza. Sqlitestudio ou esse realserver. Se preferir, você pode pegar o proprio .sql, abrir ele em algum editor de texto, adicionar as linhas lá corretamente e importar no teu servidor... O mysql tem mais facilidade para essas coisas.

ok vou tentar procurar algo para fazer isso pelo sqlstudio, obrigado

1 hora atrás, brunonyyu disse:

ok vou tentar procurar algo para fazer isso pelo sqlstudio, obrigado

@Yan Liima é fico travado nestes erros.

Sem título.jpg

Editado Agosto 13 por brunonyyu

Spring TrapS
13 de agosto de 2019 às 16:56
2 horas atrás, brunonyyu disse:

ok vou tentar procurar algo para fazer isso pelo sqlstudio, obrigado

@Yan Liima é fico travado nestes erros.

Sem título.jpg

Cara acho q n vai da certo n

Eu usava sqlite e era uma merda pra adc as coisas tive que trocar

DrakopoulosD
13 de agosto de 2019 às 20:01
5 horas atrás, brunonyyu disse:

ok vou tentar procurar algo para fazer isso pelo sqlstudio, obrigado

Tenta assim

PRAGMA journal_mode = MEMORY;
PRAGMA synchronous = OFF;
PRAGMA foreign_keys = OFF;
PRAGMA ignore_check_constraints = OFF;
PRAGMA auto_vacuum = NONE;
PRAGMA secure_delete = OFF;
BEGIN TRANSACTION;


CREATE TABLE `account_storage` (
`account_id` INTEGER NOT NULL default '0',
`key` INTEGER  NOT NULL default '0',
`value` TEXT NOT NULL default '0'
);



CREATE UNIQUE INDEX `account_storage_account_id_2` ON `account_storage` (`account_id`);
CREATE INDEX `account_storage_account_id` ON `account_storage` (`account_id`);

COMMIT;
PRAGMA ignore_check_constraints = ON;
PRAGMA foreign_keys = ON;
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;